package com.ruoyi.lock.service.impl;

import com.ruoyi.lock.domain.APeriodicPassword;
import com.ruoyi.lock.mapper.APeriodicPasswordMapper;
import com.ruoyi.lock.service.IAPeriodicPasswordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 周期性密码Service实现
 * 
 * @author ruoyi
 */
@Service
public class APeriodicPasswordServiceImpl implements IAPeriodicPasswordService {
    @Autowired
    private APeriodicPasswordMapper aPeriodicPasswordMapper;

    /**
     * 查询周期性密码
     * 
     * @param id 周期性密码主键
     * @return 周期性密码
     */
    @Override
    public APeriodicPassword selectAPeriodicPasswordById(Long id) {
        return aPeriodicPasswordMapper.selectAPeriodicPasswordById(id);
    }

    /**
     * 查询周期性密码列表
     * 
     * @param aPeriodicPassword 周期性密码
     * @return 周期性密码
     */
    @Override
    public List<APeriodicPassword> selectAPeriodicPasswordList(APeriodicPassword aPeriodicPassword) {
        return aPeriodicPasswordMapper.selectAPeriodicPasswordList(aPeriodicPassword);
    }
    
    /**
     * 查询房间指定MAC地址的周期性密码列表
     * 
     * @param deviceMac 设备MAC地址
     * @param homeId 房间ID
     * @param showExpired 是否显示过期密码
     * @return 周期性密码集合
     */
    @Override
    public List<APeriodicPassword> selectPasswordsByMacAndHomeId(String deviceMac, Long homeId, Boolean showExpired) {
        return aPeriodicPasswordMapper.selectPasswordsByMacAndHomeId(deviceMac, homeId, showExpired);
    }

    /**
     * 新增周期性密码
     * 
     * @param aPeriodicPassword 周期性密码
     * @return 结果
     */
    @Override
    public int insertAPeriodicPassword(APeriodicPassword aPeriodicPassword) {
        // 设置是否过期状态
        if (aPeriodicPassword.getIsExpired() == null) {
            LocalDateTime now = LocalDateTime.now();
            aPeriodicPassword.setIsExpired(aPeriodicPassword.getEndTime().isBefore(now));
        }
        return aPeriodicPasswordMapper.insertAPeriodicPassword(aPeriodicPassword);
    }

    /**
     * 修改周期性密码
     * 
     * @param aPeriodicPassword 周期性密码
     * @return 结果
     */
    @Override
    public int updateAPeriodicPassword(APeriodicPassword aPeriodicPassword) {
        return aPeriodicPasswordMapper.updateAPeriodicPassword(aPeriodicPassword);
    }
    
    /**
     * 更新密码备注
     * 
     * @param id 密码ID
     * @param remarks 备注内容
     * @return 结果
     */
    @Override
    public int updatePasswordRemarks(Long id, String remarks) {
        return aPeriodicPasswordMapper.updatePasswordRemarks(id, remarks);
    }

    /**
     * 批量删除周期性密码
     * 
     * @param ids 需要删除的周期性密码主键
     * @return 结果
     */
    @Override
    public int deleteAPeriodicPasswordByIds(Long[] ids) {
        return aPeriodicPasswordMapper.deleteAPeriodicPasswordByIds(ids);
    }

    /**
     * 删除周期性密码信息
     * 
     * @param id 周期性密码主键
     * @return 结果
     */
    @Override
    public int deleteAPeriodicPasswordById(Long id) {
        return aPeriodicPasswordMapper.deleteAPeriodicPasswordById(id);
    }
    
    /**
     * 更新密码状态（定时任务调用）
     * 将过期的密码标记为已过期
     */
    @Override
    public void updatePasswordStatus() {
        LocalDateTime now = LocalDateTime.now();
        
        // 查询所有未过期的密码
        APeriodicPassword query = new APeriodicPassword();
        query.setIsExpired(false);
        List<APeriodicPassword> passwords = aPeriodicPasswordMapper.selectAPeriodicPasswordList(query);
        
        // 检查是否已过期
        for (APeriodicPassword password : passwords) {
            if (password.getEndTime().isBefore(now)) {
                // 更新为已过期
                password.setIsExpired(true);
                aPeriodicPasswordMapper.updateAPeriodicPassword(password);
            }
        }
    }
} 